package Library.Game;

import Library.*;
import Library.Login.*;
import java.rmi.*;
import java.util.*;

/**
 *
 */
public interface IGameServerGateway extends Remote
{
    /**
     * Hiermee wordt een lege Game aangemaakt en geregistreerd op de
     * GameServer.
     * @param name
     * @param maxplayers
     * @param turntime
     * @param gametime 
     * @param mapid
     * @param armysize 
     * @return informatie over de aangemaakte Game
     * @throws RemoteException
     * @throws Exception
     */
    ActionResult<IGameInfo> createGame(String name, int maxplayers, int mapid, int gametime, int turntime, int armysize)
            throws RemoteException, Exception;

    /**
     * Geeft een lijst van informatie over geregistreerde Games terug.
     * @return informatie over geregistreerde Games
     * @throws RemoteException
     * @throws Exception
     */
    List<IGameInfo> getGameInfos()
            throws RemoteException, Exception;

    /**
     * Geeft het IPadres van de GameServer terug.
     * @return GameServer-IPadres
     * @throws UnknownHostException
     * @throws RemoteException
     */
    String getIP() throws UnknownHostException, RemoteException;

    /**
     * Geeft de port van de GameServer terug.
     * @return GameServer-port
     * @throws RemoteException
     */
    int getPort() throws RemoteException;

    /**
     * Speler joint een game d.m.v. een ticket en gameinformatie.
     * @param info informatie over welke game hij joint
     * @param ticket ticket van de speler
     * @param callback
     * @return gamesessie
     * @throws RemoteException Remote Error
     * @throws Exception Generieke Error
     */
    ActionResult<ISession> join(IGameInfo info, ITicket ticket, IClientService callback) throws RemoteException, Exception;
    
    /**
     * //TODO: javadoc
     * @param name
     * @return
     * @throws RemoteException Remote Error
     * @throws Exception Generieke Error
     */
    IGameInfo findGame(String name) throws RemoteException, Exception;
}
